home *** CD-ROM | disk | FTP | other *** search
/ Windows Game Programming for Dummies (2nd Edition) / WinGamProgFD.iso / pc / DirectX SDK / DXSDK / samples / Multimedia / DirectShow / BaseClasses / videoctl.h < prev    next >
Encoding:
C/C++ Source or Header  |  2001-10-08  |  7.6 KB  |  179 lines

  1. //------------------------------------------------------------------------------
  2. // File: VideoCtl.h
  3. //
  4. // Desc: DirectShow base classes.
  5. //
  6. // Copyright (c) 1992-2001 Microsoft Corporation.  All rights reserved.
  7. //------------------------------------------------------------------------------
  8.  
  9.  
  10. #ifndef __VIDEOCTL__
  11. #define __VIDEOCTL__
  12.  
  13. // These help with property page implementations. The first can be used to
  14. // load any string from a resource file. The buffer to load into is passed
  15. // as an input parameter. The same buffer is the return value if the string
  16. // was found otherwise it returns TEXT(""). The GetDialogSize is passed the
  17. // resource ID of a dialog box and returns the size of it in screen pixels
  18.  
  19. #define STR_MAX_LENGTH 256
  20. TCHAR * WINAPI StringFromResource(TCHAR *pBuffer, int iResourceID);
  21.  
  22. #ifdef UNICODE
  23. #define WideStringFromResource StringFromResource
  24. char* WINAPI StringFromResource(char*pBuffer, int iResourceID);
  25. #else
  26. WCHAR * WINAPI WideStringFromResource(WCHAR *pBuffer, int iResourceID);
  27. #endif
  28.  
  29.  
  30. BOOL WINAPI GetDialogSize(int iResourceID,     // Dialog box resource identifier
  31.                           DLGPROC pDlgProc,    // Pointer to dialog procedure
  32.                           LPARAM lParam,       // Any user data wanted in pDlgProc
  33.                           SIZE *pResult);      // Returns the size of dialog box
  34.  
  35. // Class that aggregates an IDirectDraw interface
  36.  
  37. class CAggDirectDraw : public IDirectDraw, public CUnknown
  38. {
  39. protected:
  40.  
  41.     LPDIRECTDRAW m_pDirectDraw;
  42.  
  43. public:
  44.  
  45.     DECLARE_IUNKNOWN
  46.     STDMETHODIMP NonDelegatingQueryInterface(REFIID riid,void **ppv);
  47.  
  48.     // Constructor and destructor
  49.  
  50.     CAggDirectDraw(TCHAR *pName,LPUNKNOWN pUnk) :
  51.         CUnknown(pName,pUnk),
  52.         m_pDirectDraw(NULL) { };
  53.  
  54.     virtual CAggDirectDraw::~CAggDirectDraw() { };
  55.  
  56.     // Set the object we should be aggregating
  57.     void SetDirectDraw(LPDIRECTDRAW pDirectDraw) {
  58.         m_pDirectDraw = pDirectDraw;
  59.     }
  60.  
  61.     // IDirectDraw methods
  62.  
  63.     STDMETHODIMP Compact();
  64.     STDMETHODIMP CreateClipper(DWORD dwFlags,LPDIRECTDRAWCLIPPER *lplpDDClipper,IUnknown *pUnkOuter);
  65.     STDMETHODIMP CreatePalette(DWORD dwFlags,LPPALETTEENTRY lpColorTable,LPDIRECTDRAWPALETTE *lplpDDPalette,IUnknown *pUnkOuter);
  66.     STDMETHODIMP CreateSurface(LPDDSURFACEDESC lpDDSurfaceDesc,LPDIRECTDRAWSURFACE *lplpDDSurface,IUnknown *pUnkOuter);
  67.     STDMETHODIMP DuplicateSurface(LPDIRECTDRAWSURFACE lpDDSurface,LPDIRECTDRAWSURFACE *lplpDupDDSurface);
  68.     STDMETHODIMP EnumDisplayModes(DWORD dwSurfaceDescCount,LPDDSURFACEDESC lplpDDSurfaceDescList,LPVOID lpContext,LPDDENUMMODESCALLBACK lpEnumCallback);
  69.     STDMETHODIMP EnumSurfaces(DWORD dwFlags,LPDDSURFACEDESC lpDDSD,LPVOID lpContext,LPDDENUMSURFACESCALLBACK lpEnumCallback);
  70.     STDMETHODIMP FlipToGDISurface();
  71.     STDMETHODIMP GetCaps(LPDDCAPS lpDDDriverCaps,LPDDCAPS lpDDHELCaps);
  72.     STDMETHODIMP GetDisplayMode(LPDDSURFACEDESC lpDDSurfaceDesc);
  73.     STDMETHODIMP GetFourCCCodes(LPDWORD lpNumCodes,LPDWORD lpCodes);
  74.     STDMETHODIMP GetGDISurface(LPDIRECTDRAWSURFACE *lplpGDIDDSurface);
  75.     STDMETHODIMP GetMonitorFrequency(LPDWORD lpdwFrequency);
  76.     STDMETHODIMP GetScanLine(LPDWORD lpdwScanLine);
  77.     STDMETHODIMP GetVerticalBlankStatus(LPBOOL lpblsInVB);
  78.     STDMETHODIMP Initialize(GUID *lpGUID);
  79.     STDMETHODIMP RestoreDisplayMode();
  80.     STDMETHODIMP SetCooperativeLevel(HWND hWnd,DWORD dwFlags);
  81.     STDMETHODIMP SetDisplayMode(DWORD dwWidth,DWORD dwHeight,DWORD dwBpp);
  82.     STDMETHODIMP WaitForVerticalBlank(DWORD dwFlags,HANDLE hEvent);
  83. };
  84.  
  85.  
  86. // Class that aggregates an IDirectDrawSurface interface
  87.  
  88. class CAggDrawSurface : public IDirectDrawSurface, public CUnknown
  89. {
  90. protected:
  91.  
  92.     LPDIRECTDRAWSURFACE m_pDirectDrawSurface;
  93.  
  94. public:
  95.  
  96.     DECLARE_IUNKNOWN
  97.     STDMETHODIMP NonDelegatingQueryInterface(REFIID riid,void **ppv);
  98.  
  99.     // Constructor and destructor
  100.  
  101.     CAggDrawSurface(TCHAR *pName,LPUNKNOWN pUnk) :
  102.         CUnknown(pName,pUnk),
  103.         m_pDirectDrawSurface(NULL) { };
  104.  
  105.     virtual ~CAggDrawSurface() { };
  106.  
  107.     // Set the object we should be aggregating
  108.     void SetDirectDrawSurface(LPDIRECTDRAWSURFACE pDirectDrawSurface) {
  109.         m_pDirectDrawSurface = pDirectDrawSurface;
  110.     }
  111.  
  112.     // IDirectDrawSurface methods
  113.  
  114.     STDMETHODIMP AddAttachedSurface(LPDIRECTDRAWSURFACE lpDDSAttachedSurface);
  115.     STDMETHODIMP AddOverlayDirtyRect(LPRECT lpRect);
  116.     STDMETHODIMP Blt(LPRECT lpDestRect,LPDIRECTDRAWSURFACE lpDDSrcSurface,LPRECT lpSrcRect,DWORD dwFlags,LPDDBLTFX lpDDBltFx);
  117.     STDMETHODIMP BltBatch(LPDDBLTBATCH lpDDBltBatch,DWORD dwCount,DWORD dwFlags);
  118.     STDMETHODIMP BltFast(DWORD dwX,DWORD dwY,LPDIRECTDRAWSURFACE lpDDSrcSurface,LPRECT lpSrcRect,DWORD dwTrans);
  119.     STDMETHODIMP DeleteAttachedSurface(DWORD dwFlags,LPDIRECTDRAWSURFACE lpDDSAttachedSurface);
  120.     STDMETHODIMP EnumAttachedSurfaces(LPVOID lpContext,LPDDENUMSURFACESCALLBACK lpEnumSurfacesCallback);
  121.     STDMETHODIMP EnumOverlayZOrders(DWORD dwFlags,LPVOID lpContext,LPDDENUMSURFACESCALLBACK lpfnCallback);
  122.     STDMETHODIMP Flip(LPDIRECTDRAWSURFACE lpDDSurfaceTargetOverride,DWORD dwFlags);
  123.     STDMETHODIMP GetAttachedSurface(LPDDSCAPS lpDDSCaps,LPDIRECTDRAWSURFACE *lplpDDAttachedSurface);
  124.     STDMETHODIMP GetBltStatus(DWORD dwFlags);
  125.     STDMETHODIMP GetCaps(LPDDSCAPS lpDDSCaps);
  126.     STDMETHODIMP GetClipper(LPDIRECTDRAWCLIPPER *lplpDDClipper);
  127.     STDMETHODIMP GetColorKey(DWORD dwFlags,LPDDCOLORKEY lpDDColorKey);
  128.     STDMETHODIMP GetDC(HDC *lphDC);
  129.     STDMETHODIMP GetFlipStatus(DWORD dwFlags);
  130.     STDMETHODIMP GetOverlayPosition(LPLONG lpdwX,LPLONG lpdwY);
  131.     STDMETHODIMP GetPalette(LPDIRECTDRAWPALETTE *lplpDDPalette);
  132.     STDMETHODIMP GetPixelFormat(LPDDPIXELFORMAT lpDDPixelFormat);
  133.     STDMETHODIMP GetSurfaceDesc(LPDDSURFACEDESC lpDDSurfaceDesc);
  134.     STDMETHODIMP Initialize(LPDIRECTDRAW lpDD,LPDDSURFACEDESC lpDDSurfaceDesc);
  135.     STDMETHODIMP IsLost();
  136.     STDMETHODIMP Lock(LPRECT lpDestRect,LPDDSURFACEDESC lpDDSurfaceDesc,DWORD dwFlags,HANDLE hEvent);
  137.     STDMETHODIMP ReleaseDC(HDC hDC);
  138.     STDMETHODIMP Restore();
  139.     STDMETHODIMP SetClipper(LPDIRECTDRAWCLIPPER lpDDClipper);
  140.     STDMETHODIMP SetColorKey(DWORD dwFlags,LPDDCOLORKEY lpDDColorKey);
  141.     STDMETHODIMP SetOverlayPosition(LONG dwX,LONG dwY);
  142.     STDMETHODIMP SetPalette(LPDIRECTDRAWPALETTE lpDDPalette);
  143.     STDMETHODIMP Unlock(LPVOID lpSurfaceData);
  144.     STDMETHODIMP UpdateOverlay(LPRECT lpSrcRect,LPDIRECTDRAWSURFACE lpDDDestSurface,LPRECT lpDestRect,DWORD dwFlags,LPDDOVERLAYFX lpDDOverlayFX);
  145.     STDMETHODIMP UpdateOverlayDisplay(DWORD dwFlags);
  146.     STDMETHODIMP UpdateOverlayZOrder(DWORD dwFlags,LPDIRECTDRAWSURFACE lpDDSReference);
  147. };
  148.  
  149.  
  150. // DirectShow must work on multiple platforms.  In particular, it also runs on
  151. // Windows NT 3.51 which does not have DirectDraw capabilities. The filters
  152. // cannot therefore link statically to the DirectDraw library. To make their
  153. // lives that little bit easier we provide this class that manages loading
  154. // and unloading the library and creating the initial IDirectDraw interface
  155.  
  156. typedef DWORD (WINAPI *PGETFILEVERSIONINFOSIZE)(LPTSTR,LPDWORD);
  157. typedef BOOL (WINAPI *PGETFILEVERSIONINFO)(LPTSTR,DWORD,DWORD,LPVOID);
  158. typedef BOOL (WINAPI *PVERQUERYVALUE)(LPVOID,LPTSTR,LPVOID,PUINT);
  159.  
  160. class CLoadDirectDraw
  161. {
  162.     LPDIRECTDRAW m_pDirectDraw;     // The DirectDraw driver instance
  163.     HINSTANCE m_hDirectDraw;        // Handle to the loaded library
  164.  
  165. public:
  166.  
  167.     CLoadDirectDraw();
  168.     ~CLoadDirectDraw();
  169.  
  170.     HRESULT LoadDirectDraw(LPSTR szDevice);
  171.     void ReleaseDirectDraw();
  172.     HRESULT IsDirectDrawLoaded();
  173.     LPDIRECTDRAW GetDirectDraw();
  174.     BOOL IsDirectDrawVersion1();
  175. };
  176.  
  177. #endif // __VIDEOCTL__
  178.  
  179.